package com.sftz.modules.common.service;

import org.nutz.dao.Dao;
import org.nutz.dao.SqlManager;
import org.nutz.dao.Sqls;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.loader.annotation.Inject;
import org.nutz.ioc.loader.annotation.IocBean;
import org.nutz.log.Log;
import org.nutz.log.Logs;

import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;

import com.sftz.framework.res.enums.UserStatusEnum;
import com.sftz.modules.common.dto.WxMinappUserDto;
import com.uxuexi.core.common.util.BeanUtil;
import com.uxuexi.core.common.util.Util;
import com.uxuexi.core.db.dao.IDbDao;
import com.uxuexi.core.db.util.DbSqlUtil;

/**
 * 用户service
 * <p>
 *
 * @author   朱晓川
 * @Date	 2018年12月11日 	 
 */
@IocBean
public class WxMinappUserService {

	@Inject
	protected IDbDao dbDao;

	@Inject
	protected Dao nutDao;

	@Inject
	protected SqlManager sqlManager;

	private static final Log log = Logs.get();

	/**
	 * 微信用户登录接口
	 * <p>
	 * 1,判断用户是否存在，如果不存在则设为手机未绑定状态；
	 * 2,如果已经存在，设置手机号和是否已经绑定的字段值,同时将微信用户的信息一并返回。
	 */
	public WxMinappUserDto login(WxMaUserInfo wxUser) {
		String unionId = wxUser.getUnionId();
		WxMinappUserDto user = findUserByUnoinId(unionId);
		String nickName = null;
		if (Util.isEmpty(user)) {
			//用户不存在
			user = new WxMinappUserDto();
			user.setBandTel(false);
		} else {
			//2用户已经存在
			String tel = user.getTel();
			nickName = user.getNickName();
			if (Util.isEmpty(tel)) {
				user.setBandTel(false);
			} else {
				//已绑定手机
				user.setBandTel(true);
				user.setTel(tel);
			}
		}

		BeanUtil.copyProperties(wxUser, user);
		//王宏伟-将微信昵称改为用户的昵称
		if (!Util.isEmpty(nickName)) {
			user.setNickName(nickName);
		}
		return user;
	}

	/**
	 * 根据unionId获取用户信息
	 * <p>
	 * 注意:只会返回我们数据库中存储的值
	 * @param unionId  unionId
	 */
	public WxMinappUserDto findUserByUnoinId(String unionId) {
		Sql sql = Sqls.create(sqlManager.get("minapp_common_findUserByUnoinId"));
		sql.params().set("unionId", unionId);
		sql.params().set("status", UserStatusEnum.VALID.intKey());
		WxMinappUserDto user = DbSqlUtil.fetchEntity(dbDao, WxMinappUserDto.class, sql);
		return user;
	}
}
